package br.com.viaembratel.view.backing.vialivre.oferta;

import br.com.viaembratel.vialivre.modelo.prepago.consumidor.v1_0_0.types.ConsumidorType;
import br.com.viaembratel.vialivre.modelo.prepago.consumidor.v1_0_0.types.ConsumidoresType;

import br.com.viaembratel.vialivre.modelo.prepago.oferta.v1_0_0.types.OfertaType;
import br.com.viaembratel.vialivre.modelo.prepago.oferta.v1_0_0.types.OfertasType;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.component.UISelectItems;

import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.ValueChangeEvent;

import oracle.adf.model.BindingContext;
import oracle.adf.share.ADFContext;
import oracle.adf.view.rich.component.rich.RichDocument;
import oracle.adf.view.rich.component.rich.RichForm;
import oracle.adf.view.rich.component.rich.data.RichTable;
import oracle.adf.view.rich.component.rich.input.RichSelectOneChoice;
import oracle.adf.view.rich.component.rich.output.RichMessages;


import oracle.adf.view.rich.component.rich.output.RichOutputText;

import oracle.binding.BindingContainer;
import oracle.binding.OperationBinding;

public class Oferta {
    private RichForm f1;
    private RichDocument d1;
    private RichMessages m1;
    private RichSelectOneChoice cmbProduto;
    private UISelectItems si1;
    private RichTable tblOfertas;
    private String identificadorCidade;
    private RichOutputText ot2;

    public void setF1(RichForm f1) {
        this.f1 = f1;
    }

    public RichForm getF1() {
        String idCidade =
            FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("identificadorCidade");
        if (idCidade != null && !"".equals(idCidade.trim())) {
            ADFContext adfContext = ADFContext.getCurrent();
            // To get the value from the application scope
            System.out.println(":::: Message ::" +
                               adfContext.getApplicationScope().get("identificadorCidade"));
            adfContext.getSessionScope().put("identificadorCidade", idCidade);
        }
        return f1;
    }

    public void setD1(RichDocument d1) {
        this.d1 = d1;
    }

    public RichDocument getD1() {
        return d1;
    }

    public void setM1(RichMessages m1) {
        this.m1 = m1;
    }

    public RichMessages getM1() {
        return m1;
    }

    public void setCmbProduto(RichSelectOneChoice soc1) {
        this.cmbProduto = soc1;
    }

    public RichSelectOneChoice getCmbProduto() {
        return cmbProduto;
    }

    public void setSi1(UISelectItems si1) {
        this.si1 = si1;
    }

    public UISelectItems getSi1() {
        return si1;
    }

    public void setTblOfertas(RichTable t1) {
        this.tblOfertas = t1;
    }

    public RichTable getTblOfertas() {
        return tblOfertas;
    }

    public BindingContainer getBindings() {
        return BindingContext.getCurrent().getCurrentBindingsEntry();
    }

    public void cmbProduto_valueChange(ValueChangeEvent valueChangeEvent) {

        BindingContainer bindings = getBindings();
        OperationBinding operationBinding =
            bindings.getOperationBinding("consultarOfertasDisponiveisVenda");
        Object result = operationBinding.execute();

        if (!operationBinding.getErrors().isEmpty()) {
            FacesContext.getCurrentInstance().addMessage("erroConsulta",
                                                         new FacesMessage(FacesMessage.SEVERITY_ERROR,
                                                                          "",
                                                                          "Ocorreu um erro durante a consulta das ofertas."));
        } else {

            RichTable richTable = this.getTblOfertas();
            if (result != null) {
                List<OfertaType> oferta = ((OfertasType)result).getOferta();
                richTable.setValue(oferta);
                richTable.setRows(oferta.size());
                richTable.setFetchSize(oferta.size());
            }
            richTable.setRendered(true);
            richTable.setEmptyText("Nenhuma oferta encontrada.");
        }
    }

    public void setIdentificadorCidade(String identificadorCidade) {
        if (!"".equals(identificadorCidade.trim()) &&
            identificadorCidade != null)
            this.identificadorCidade = identificadorCidade;
    }

    public String getIdentificadorCidade() {
        return identificadorCidade;
    }

    public void setOt2(RichOutputText ot2) {
        this.ot2 = ot2;
    }

    public RichOutputText getOt2() {
        return ot2;
    }
}
